#include "subscription.hpp"

namespace fasys{ namespace subscriber{

subscription::~subscription()
{
  delete _channels;
};

subscription::subscription(channels_container* cc)
  : _channels(0)  
  , _channels_container(cc)
{}

// создать, обновить канал подписки
channel_id_t subscription::create(const std::string& channel, size_t min_size, size_t max_size )
{
  if ( _channels == 0 )
    _channels = new messages_channels(_channels_container);

  channel_id_t channel_id = _channels->create(channel, min_size, max_size);
  if ( channel_id > 0)
    _channel_ids.insert(channel_id);
  return channel_id;
}

// удалить канал подписки
channel_id_t subscription::remove(const std::string& channel)
{
  // TODO: удалить канал
  return 0;
}

void subscription::publish(const message_notify& cmd)
{
  if ( _channels == 0 )
    _channels = new messages_channels(_channels_container);
  _channels->update(cmd);
}

void subscription::publish(const message_list_response& cmd)
{
  //Ахтунг! Тупа брать полученное сообщение от сервера каналов и класть сюда нельзя
  // 1. Нужно изменить limit=0 на limit=1 или больше в зависимости от запросов клиента
  if ( _channels == 0 )
    _channels = new messages_channels(_channels_container);

  _channels->update(cmd);
}

}}

